#include<bits/stdc++.h>
#define int long long
#define ls(x) ((x)*2)
#define rs(x) ((x)*2+1)
#define Debug(...) fprintf(stderr, __VA_ARGS__)
#define For(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define Rof(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define rep(i,  b) for(int i=1,i##end=b;i<=i##end;i++)
using namespace std;
const int N=1e5+5,Mod=998244353;
bool SSS;
//char buf[(1<<21)+5],*p1,*p2;
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline void chmx(int &x,int y){(x<y)&&(x=y);}
inline void chmn(int &x,int y){(x>y)&&(x=y);}
//inline void Add(int &x,int y){(x=x+y+Mod)%Mod;}
typedef __int128_t i128;
i128 _base=1;
inline int mol(int x){return x-Mod*(_base*x>>64);}
inline int read(){
	int f=0,x=0;
	char ch=getchar();
	while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}
	while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return f?-x:x;
}
int n,m,Q;
int u[N],v[N];
vector<int> q[N];
int x[N],y[N],p[N];
int c[N],d[N];
int dep[N],fa[N],siz[N],son[N];
int dfn[N],top[N];
void dfs1(int x,int faz){
	fa[x]=faz;
	siz[x]=1;
	dep[x]=dep[faz]+1;
	for(auto y:q[x]){
		if(y==faz) continue;
		dfs1(y,x);
		siz[x]+=siz[y];
		if(siz[son[x]]<siz[y]) son[x]=y;
	}
}
void dfs2(int x,int tp){
	top[x]=tp;
	if(!son[x]) return;
	dfs2(son[x],tp);
	for(auto y:q[x]){
		if(y==fa[x]||y==son[x]) continue;
		dfs2(y,y);
	}
}
inline int lca(int x,int y){
	while(top[x]!=top[y]){
		if(dep[top[x]]<dep[top[y]]) swap(x,y);
		x=fa[top[x]];
	}
	if(dep[x]>dep[y]) swap(x,y);
	return x;
}
bitset<1005>mp[1005];
inline int dis(int x,int y){
	int p=lca(x,y);
	return dep[x]+dep[y]-2*dep[p];
}
int vis[N];
void dfs3(int now,int u,int faz){
	mp[now][u]=1;
	vis[u]=1;
	For(v,1,m){
		if(vis[v]||v==faz) continue;
		if(!mp[u][v]||u==v) continue;
		dfs3(now,v,u); 
	}	
}
int l[N],r[N];
struct BU{
	int c,d;
}z[N];
inline bool cmp(BU a,BU b){
	return a.c<b.c;
}
int smn[N][21],smx[N][21],lg[N];
inline void GetST(){
	For(i,1,n){
		smn[i][0]=l[i];
		smx[i][0]=r[i];
		lg[i]=lg[i>>1]+1;
	}
	For(i,1,20){
		For(j,1,n){
			if(j+(1<<(i-1))>n) break;
			smn[j][i]=min(smn[j][i-1],smn[j+(1<<(i-1))][i-1]);
			smx[j][i]=max(smx[j][i-1],smx[j+(1<<(i-1))][i-1]);
		}
	}
}
inline int STmi(int l,int r){
	if(r<l) return 1e16;
	l=max(l,1ll),r=min(r,n);
	int k=lg[r-l+1]-1;
	return min(smn[l][k],smn[r-(1<<k)+1][k]);
}
inline int STmx(int l,int r){
	if(r<l) return 0;
	l=max(l,1ll),r=min(r,n);
	int k=lg[r-l+1]-1;
	return max(smx[l][k],smx[r-(1<<k)+1][k]);
}
int f[N];
inline int find(int x){return f[x]=(f[x]==x?x:find(f[x]));}
inline void merge(int x,int y){
	if(find(x)==find(y)) return;
	fa[find(y)]=find(x);
}
int sta[N],tp;
inline void solve(){
	n=read(),m=read(),Q=read();
	For(i,1,n-1) u[i]=read(),v[i]=read();
	For(i,1,Q) x[i]=read(),y[i]=read(),p[i]=read();
	For(i,1,m ) c[i]=read(),d[i]=read(),z[i]={c[i],d[i]};
	For(i,1,n-1) q[u[i]].push_back(v[i]),q[v[i]].push_back(u[i]);
	if(n<=1000){
		dfs1(1,0),dfs2(1,1);
		For(i,1,m){
			For(j,1,m){
				if(dis(c[i],c[j])<=d[i]) mp[i][j]=1;
			}
		}
		For(i,1,m){
			For(j,1,m){
				vis[j]=0;
			}
			dfs3(i,i,0);
		}
		//~ For(i,1,m){
			//~ For(j,1,m) cout<<mp[i][j]<<" ";
			//~ puts("");
		//~ }
		For(i,1,Q){
			int u=x[i],v=y[i];
			bitset<1005>bk;
			For(j,1,m){
				if(dis(u,c[j])<=p[i]){
					bk|=(mp[j]);
				}
			}
			bool flag=0;
			For(j,1,m){
				if(dis(c[j],v)<=d[j]){
					if(bk[j]) flag=1;
				}
				if(flag) break;
			}
			if(dis(u,v)<=p[i]) flag=1;
			if(flag){puts("YES");continue;}
			
			puts("NO");
		}
		return;
	}
	bool flags=0;
	For(i,1,n-1)
		if(u[i]==i&&v[i]==i+1);
		else flags=1;
	if(!flags){
		sort(z+1,z+m+1,cmp);
		set<int>ss;
		For(i,1,m) ss.insert(c[i]);
		For(i,1,n) l[i]=1e16;
		For(i,1,m){
			l[i]=z[i].c-z[i].d;
			r[i]=z[i].c+z[i].d;	
		}
		For(t,1,1000){
			tp=0;
			For(i,1,m){
				while(tp&&sta[tp]>=z[i].c-z[i].d) l[z[i].c]=min(l[z[i].c],l[sta[tp]]),r[z[i].c]=max(r[z[i].c],r[sta[tp]]),tp--;
				sta[++tp]=z[i].c;
			}
			tp=0;
			Rof(i,m,1){
				while(tp&&sta[tp]<=z[i].c+z[i].d) r[z[i].c]=max(r[z[i].c],r[sta[tp]]),l[z[i].c]=min(l[z[i].c],l[sta[tp]]),tp--;
				sta[++tp]=z[i].c;
			}
		}
		GetST();
		For(i,1,Q){
			int u=x[i],v=y[i];
			int L=min(u-p[i],STmi(u-p[i],u+p[i]));
			int R=max(u+p[i],STmx(u-p[i],u+p[i]));
			//~ cout<<L<<" "<<R<<" "<<v<<" "<<u<<endl;
			if(L<=v&&v<=R) puts("YES");
			else puts("NO");
			
		}
		return;
	}
}
bool TTT;
signed main(){
	_base=(_base<<64)/Mod;
	freopen("shu.in","r",stdin);
	freopen("shu.out","w",stdout);
	// ios::sync_with_stdio(false);
	// cin.tie(0); cout.tie(0);
	int T=1;
	while(T--){solve();}
#ifdef LOCAL
	Debug("\nMy Memories: %lldMib\n",(int)(&TTT-&SSS)/1024/1024);
    Debug("\nMy Time: %.3lfs\n", (double)clock() / CLOCKS_PER_SEC);
#endif
	return 0;
}
